using System;
using System.IO;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.Net.NetworkInformation;



namespace DaouVT_Sample
{
    public partial class Form1 : Form
    {
        TcpClient Client;

        StreamReader Reader;
        StreamWriter Writer;

        NetworkStream stream;
        Thread ReceiveThread;

        bool Connected;

        private delegate void AddTextDelegate(string strText);

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Connected = false;

            if (Reader != null)
            {

                Reader.Close();
            }

            if (Writer != null)
            {

                Writer.Close();
            }

            if (Client != null)
            {
                Client.Close();
            }

            if (ReceiveThread != null)
            {
                ReceiveThread.Abort();
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (isConnected == true)
            {
                textBox2.AppendText("[SEND]" + textBox3.Text + "\r\n");
                Writer.Write(textBox3.Text);
                Writer.Flush();
                textBox3.Clear();
            }
        }

        bool isConnected = false;
        System.Windows.Forms.Timer Timer = new System.Windows.Forms.Timer();
        private void button1_Click(object sender, EventArgs e)
        {

            if (textBox1.Text == "")
            {
                MessageBox.Show("서버 아이피 미입력");
            }
            else
            {
                if (textBox5.Text == "")
                {
                    MessageBox.Show("서버 포트 미입력");
                }
                else
                {
                    try
                    {
                        if (Connected == true)
                        {
                            if (Reader != null)
                            {
                                Reader.Close();
                            }

                            if (Writer != null)
                            {
                                Writer.Close();
                            }

                            if (Client != null)
                            {
                                Client.Close();
                            }

                            if (ReceiveThread != null)
                            {
                                ReceiveThread.Abort();
                            }
                        }


                        //        Timer.Interval = 10000;
                        //        Timer.Tick += new EventHandler(button3_Click);
                        //Timer.Start();

                        String IP = textBox1.Text;
                        int port = Int32.Parse(textBox5.Text);

                        Client = new TcpClient();

                        Client.Connect(IP, port);
                        stream = Client.GetStream();

                        Connected = true;
                        textBox2.AppendText("서버와연결되었습니다." + "\r\n");
                        //   button1.Enabled = false;

                        isConnected = true;

                        Reader = new StreamReader(stream, System.Text.Encoding.Default);
                        Writer = new StreamWriter(stream, System.Text.Encoding.Default);
                        //Writer = new StreamWriter(stream);

                        ReceiveThread = new Thread(new ThreadStart(Receive));
                        ReceiveThread.Start();
                    }
                    catch (Exception ConnE)
                    {
                        textBox2.AppendText(ConnE.Message + "\r\n");
                    }
                }
            }
        }

        private void Receive()
        {
            AddTextDelegate AddText = new AddTextDelegate(textBox2.AppendText);

            try
            {
                while (Connected)
                {
                    Thread.Sleep(1);

                    if (stream.CanRead)
                    {
                        char[] c = null;
                        c = new char[5000];

                        char[] d = null;
                        d = new char[5000];

                        int adv;
                        adv = Reader.Read(c, 0, c.Length);

                        string s = new string(c);
                        string tempStr = s.Replace("\0", "");

                        string tempStr1 = string.Empty;

                        if (stream.DataAvailable)
                        {
                            adv = Reader.Read(d, 0, d.Length);

                            string s1 = new string(d);
                            tempStr1 = s1.Replace("\0", "");
                        }


                        if (tempStr.Length > 0)
                        {
                            Invoke(AddText, "[RECV]:" + tempStr + tempStr1 + "\r\n");

                            if ((tempStr.Substring(0, 4) == "1000") || (tempStr.Substring(0, 4) == "2000"))
                            {

                            }
                            else if (tempStr.Substring(0, 1) == "K" && tempStr.Substring(0, 4) != "K910")
                            {
                                string outmsg = Message(tempStr);
                                Invoke(AddText, outmsg);
                            }
                            else if (tempStr.Substring(0, 1) == "S")
                            {
                                string outmsg = Message(tempStr);
                                Invoke(AddText, outmsg);
                            }
                            else if (tempStr.Substring(0, 4) == "0000")
                            {
                                if (tempStr.Length > 4)
                                {
                                    if (tempStr.Substring(4, 1) == "C")
                                    {
                                        string outmsg = Message(tempStr);
                                        Invoke(AddText, outmsg);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.Write(e);
            }
        }
        
        bool ispossible = false;

        private void button3_Click(object sender, EventArgs e)
        {
            if (isConnected == true)
            {
                try
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();

                    if (Credit_Approve.Checked == true)
                    {
                        // 전문구분
                        req = insertLeftJustify(req, "0100", 4);
                        // 업무구분
                        req = insertLeftJustify(req, "10", 2);
                    }
                    else if (Credit_Cancel.Checked == true)
                    {
                        req = insertLeftJustify(req, "0400", 4);
                        // 업무구분
                        req = insertLeftJustify(req, "10", 2);
                    }
                    else if (Currency_info.Checked == true)
                    {
                        // 전문구분
                        req = insertLeftJustify(req, "0100", 4);
                        // 업무구분
                        req = insertLeftJustify(req, "1C", 2);
                    }
                    else if (Currency_Approve.Checked == true)
                    {
                        // 전문구분
                        req = insertLeftJustify(req, "0100", 4);
                        // 업무구분
                        req = insertLeftJustify(req, "1D", 2);
                    }
                    else if (Credit_Comp_Approve.Checked == true)
                    {
                        // 전문구분
                        req = insertLeftJustify(req, "0100", 4);
                        // 업무구분
                        req = insertLeftJustify(req, "11", 2);
                    }
                    else if (Credit_Comp_Cancel.Checked == true)
                    {
                        // 전문구분
                        req = insertLeftJustify(req, "0400", 4);
                        // 업무구분
                        req = insertLeftJustify(req, "11", 2);
                    }
                    else if (radioButton12.Checked == true)
                    {
                        // 전문구분
                        req = insertLeftJustify(req, "0100", 4);
                        // 업무구분
                        req = insertLeftJustify(req, "17", 2);
                    }
                    else if (radioButton13.Checked == true)
                    {
                        // 전문구분
                        req = insertLeftJustify(req, "0400", 4);
                        // 업무구분
                        req = insertLeftJustify(req, "17", 2);
                    }

                    req = insertLeftJustify(req, txt_2.Text, 8);
                    req = insertLeftJustify(req, "0000", 4);

                    if ((Credit_Comp_Approve.Checked == true) || (Credit_Comp_Cancel.Checked == true))
                    {
                        //req = insertLeftJustify(req, "Z", 14);
                        req = insertLeftJustify(req, textBox67.Text, 14);
                    }
                    else
                    {
                        req = insertLeftJustify(req, textBox67.Text, 14);
                    }

                    req = insertLeftJustify(req, txt_3.Text, 2);
                    req = insertLeftJustify(req, txt_4.Text, 12);
                    req = insertLeftJustify(req, txt_5.Text, 12);
                    req = insertLeftJustify(req, txt_6.Text, 12);
                    req = insertLeftJustify(req, txt_7.Text, 12);
                    req = insertLeftJustify(req, txt_8.Text, 8);
                    req = insertLeftJustify(req, txt_9.Text, 12);

                    if ((Credit_Comp_Approve.Checked == true) || (Credit_Comp_Cancel.Checked == true))
                    {
                        req = insertLeftJustify(req, point_org_num.Text, 12);
                    }

                    req = insertLeftJustify(req, txt_10.Text, 42);      //가맹점데이타

                    if (checkBox1.Checked == true)
                    {
                        req = insertLeftJustify(req, textBox70.Text, 8); //부사업자 단말기번호
                        req = insertLeftJustify(req, textBox71.Text, 1); //서명재사용
                    }

                    //컵 보증금
                    req = insertLeftJustify(req, textBox61.Text, 6);

                    req = insertLeftJustify(req, "\x1c", 1);

                    //유종 정보
                    if (textBox67.Text[0] == '1' || textBox67.Text[0] == '2' || textBox67.Text[0] == '3')
                    {
                        req = insertLeftJustify(req, textBox60.Text, 88);
                    }
                    else
                    {
                        //req = insertLeftJustify(req, "", 88);
                    }

                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
                catch (Exception ex)
                {
                    textBox2.Text = "서버와 연결이 실패되었습니다.\n" + ex.Message;
                }

            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            string type = "K920";
            string terminal = txt_2.Text;


            string full_msg = type + terminal;

            textBox4.Text = full_msg;

            Writer.Write(full_msg);
            Writer.Flush();
        }

        public StringBuilder insertLeftZero(StringBuilder target, string item, int maxLen)
        {
            int myLen = maxLen;

            if (item.Length < maxLen)
            {
                myLen = myLen - item.Length;
                for (int i = 0; i < myLen; i++)
                {
                    target.Append("0");
                }

                target.Append(item);

                return target;
            }
            else if (item.Length == maxLen)
            {
                target.Append(item);

                return target;
            }
            else
            {
                for (int i = 0; i < myLen; i++)
                {
                    target.Append(item[i]);
                }

                return target;
            }
        }

        public StringBuilder insertLeftJustify(StringBuilder target, string item, int maxLen)
        {
            int myLen = maxLen;

            if (item.Length < maxLen)
            {
                target.Append(item);

                myLen = myLen - item.Length;

                for (int i = 0; i < myLen; i++)
                {
                    target.Append(" ");
                }

                return target;
            }
            else if (item.Length == maxLen)
            {
                target.Append(item);

                return target;
            }
            else
            {
                for (int i = 0; i < myLen; i++)
                {
                    target.Append(item[i]);
                }

                return target;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            approval_date.Text = DateTime.Now.ToString("yyyyMMdd");
            txt_8.Text = DateTime.Now.ToString("yyyyMMdd");
            textBox12.Text = DateTime.Now.ToString("yyyyMMdd");
            textBox29.Text = DateTime.Now.ToString("yyyyMMdd");
            textBox_barcode_date.Text = DateTime.Now.ToString("yyyyMMdd");
            textBox37.Text = DateTime.Now.ToString("yyyyMMdd");
        }


        public string Message(string input)
        {
            string output = string.Empty;

            switch (input)
            {
                case "K001":
                    output = "[" + input + "]" + "리더기 에러" + "\r\n";
                    break;
                case "K002":
                    output = "[" + input + "]" + "IC 카드 거래 불가" + "\r\n";
                    break;
                case "K003":
                    output = "[" + input + "]" + "M/S카드 거래 불가" + "\r\n";
                    break;
                case "K004":
                    output = "[" + input + "]" + "마그네틱 카드를 읽혀주세요(FALL-BACK)" + "\r\n";
                    break;
                case "K005":
                    output = "[" + input + "]" + "IC카드가 삽입되어 있습니다. 제거해주세요." + "\r\n";
                    break;
                case "K006":
                    output = "[" + input + "]" + "카드거절" + "\r\n";
                    break;
                case "K007":
                    output = "[" + input + "]" + "결제도중 카드를 제거하였습니다." + "\r\n";
                    break;
                case "K008":
                    output = "[" + input + "]" + "결제도중 카드를 제거하였습니다." + "\r\n";
                    break;
                case "K011":
                    output = "[" + input + "]" + "IC리더기 키 다운로드 요망" + "\r\n";
                    break;
                case "K012":
                    output = "[" + input + "]" + "리더기 템퍼 오류" + "\r\n";
                    break;
                case "K013":
                    output = "[" + input + "]" + "상호인증오류" + "\r\n";
                    break;
                case "K014":
                    output = "[" + input + "]" + "암/복호와 오류" + "\r\n";
                    break;
                case "K015":
                    output = "[" + input + "]" + "무결성 검사 실패(다우데이타 관리자에게 문의 하시기 바랍니다.)" + "\r\n";
                    break;
                case "K101":
                    output = "[" + input + "]" + "커맨드 전달 실패" + "\r\n";
                    break;
                case "K102":
                    output = "[" + input + "]" + "키트로닉스 모듈 타임아웃" + "\r\n";
                    break;
                case "K901":
                    output = "[" + input + "]" + "카드사 파라미터 데이터 오류" + "\r\n";
                    break;
                case "K902":
                    output = "[" + input + "]" + "카드사 파라미터 반영불가" + "\r\n";
                    break;
                case "K990":
                    output = "[" + input + "]" + "사용자 강제종료" + "\r\n";
                    break;
                case "K997":
                    output = "[" + input + "]" + "리더기에서 전달받은 데이터이상" + "\r\n";
                    break;
                case "K998":
                    output = "[" + input + "]" + "리더기 타임아웃" + "\r\n";
                    break;
                case "K999":
                    output = "[" + input + "]" + "전문 오류" + "\r\n";
                    break;
                case "K081":
                    output = "[" + input + "]" + "IC카드를 넣어주세요" + "\r\n";
                    break;
                case "K082":
                    output = "[" + input + "]" + "처리불가 상태" + "\r\n";
                    break;
                case "K083":
                    output = "[" + input + "]" + "카드 입력 취소" + "\r\n";
                    break;
                case "S000":
                    output = "[" + input + "]" + "외부 서명 데이터 입력" + "\r\n";
                    break;
                case "S001":
                    output = "[" + input + "]" + "외부 서명 데이터 입력 실패 ( Time Out )" + "\r\n";
                    break;
                case "S100":
                    output = "[" + input + "]" + "외부 서명 데이터 입력 성공" + "\r\n";
                    break;
                case "S111":
                    output = "[" + input + "]" + "외부 서명 데이터 입력 취소" + "\r\n";
                    break;
                case "S052":
                    output = "[" + input + "]" + "신용 카드 거래 취소" + "\r\n";
                    break;
                case "S053":
                    output = "[" + input + "]" + "현금 영수증 거래 취소" + "\r\n";
                    break;
                case "S054":
                    output = "[" + input + "]" + "현금 IC 거래 취소" + "\r\n";
                    break;
                case "K110":
                    output = "[" + input + "]" + "KIOSK 카드 리딩 완료" + "\r\n";
                    break;
                default:
                    output = "[" + input + "]" + "없는로그" + "\r\n";
                    break;
            }

            if (input.Length > 8)
            {
                if (input.Substring(4, 4) == "C010")
                {
                    string ErrCode = input.Substring(0, 4);     // 에러 코드

                    string ErrCnt = input.Substring(8, 2);      // 에러 갯수              00 : 정상 , 1 이상 에러 발생 갯수
                    string DllCode = input.Substring(10, 2);     // DLL 에러               00 정상, 01 에러
                    string NetCode = input.Substring(12, 2);     // 네트워크 상태          00 정상, 01 에러
                    string AppCode = input.Substring(14, 2);     // 클라이언트 연결 상태  00 정상, 01 에러
                    string ReaderCode = input.Substring(16, 2); // 리더기 상태            00 정상, 01 에러
                    string SignCode = input.Substring(18, 2);   // 서명패드 상태          00 정상, 01 에러
                    string IniCode = input.Substring(20, 2);    // INI 파일 상태          00 정상, 01 에러

                    string strResultStat = "에러: " + ErrCnt;

                    if (DllCode == "00")
                    {
                        strResultStat += " DLL 상태: OK" + "\n" + "\r";
                    }
                    else
                    {
                        strResultStat += " DLL 상태: FAIL" + "\n" + "\r";
                    }

                    if (NetCode == "00")
                    {
                        strResultStat += " 네트워크 상태: OK" + "\n" + "\r";
                    }
                    else
                    {
                        strResultStat += " 네트워크 상태: FAIL" + "\n" + "\r";
                    }



                    if (AppCode == "00")
                    {
                        strResultStat += " 어플리케이션 상태: OK" + "\n";
                    }
                    else
                    {
                        strResultStat += " 어플리케이션 상태: FAIL" + "\n";
                    }

                    if (ReaderCode == "00")
                    {
                        strResultStat += " 리더기 상태: OK" + "\n";
                    }
                    else
                    {
                        strResultStat += " 리더기 상태: FAIL" + "\n";
                    }

                    if (SignCode == "00")
                    {
                        strResultStat += " 서명패드 상태: OK" + "\n";
                    }
                    else
                    {
                        strResultStat += " 서명패드 상태: FAIL" + "\n";
                    }

                    if (IniCode == "00")
                    {
                        strResultStat += " INI 상태: OK" + "\n" + "\r";
                    }
                    else
                    {
                        strResultStat += " INI 상태: FAIL" + "\n" + "\r";
                    }

                    output = strResultStat;
                }
            }

            return output;
        }

        private void button5_Click(object sender, EventArgs e)
        {
            try
            {

                if (isConnected == true)
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();
                    req = insertLeftJustify(req, "K980", 4);
                    req = insertLeftJustify(req, "99999999", 8);
                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
            }
            catch (Exception ex)
            {
                textBox2.Text = "서버와 연결이 실패되었습니다.\n";
            }

        }

        private void button7_Click(object sender, EventArgs e)
        {
            try
            {

                if (isConnected == true)
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();
                    req = insertLeftJustify(req, "K600", 4);
                    req = insertLeftJustify(req, "99999999", 8);
                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
            }
            catch (Exception ex)
            {
                textBox2.Text = "서버와 연결이 실패되었습니다.\n";
            }

        }

        private void button4_Click_1(object sender, EventArgs e)
        {
            if (isConnected == true)
            {
                StringBuilder req = new StringBuilder();
                req.Clear();
                req = insertLeftJustify(req, "0200", 4);
                req = insertLeftJustify(req, "40", 2);
                req = insertLeftJustify(req, textBox6.Text, 8);
                req = insertLeftJustify(req, "0000", 4);
                req = insertLeftJustify(req, "0", 14);
                req = insertLeftJustify(req, textBox7.Text, 2);
                req = insertLeftJustify(req, textBox8.Text, 12);
                req = insertLeftJustify(req, textBox9.Text, 12);
                req = insertLeftJustify(req, textBox10.Text, 12);
                req = insertLeftJustify(req, textBox11.Text, 12);
                req = insertLeftJustify(req, textBox12.Text, 8);
                req = insertLeftJustify(req, textBox13.Text, 12);
                req = insertLeftJustify(req, textBox14.Text, 1);
                req = insertLeftJustify(req, textBox15.Text, 1);
                req = insertLeftJustify(req, textBox16.Text, 30);       // 사용자정보 (30)
                req = insertLeftJustify(req, Recept_DISC.Text, 42);     // 가맹점데이타 (42)
                req = insertLeftJustify(req, textBox63.Text, 6);     // 컵 보증금 (6)

                textBox4.Text = req.ToString();

                Writer.Write(req.ToString());
                Writer.Flush();
            }
        }

        private void tabPage1_Click(object sender, EventArgs e)
        {

        }

        private void button8_Click(object sender, EventArgs e)
        {//현금IC 승인 
            if (isConnected == true)
            {
                StringBuilder req = new StringBuilder();
                req.Clear();

                if (radio_cashic_auth.Checked == true)
                {
                    // 전문구분
                    req = insertLeftJustify(req, "0100", 4);
                    // 업무구분
                    req = insertLeftJustify(req, "50", 2);
                }
                else if (radio_cashic_cancel.Checked == true)
                {
                    req = insertLeftJustify(req, "0400", 4);
                    // 업무구분
                    req = insertLeftJustify(req, "50", 2);
                }
                else if (radio_cashic_balance.Checked == true)
                {
                    // 전문구분
                    req = insertLeftJustify(req, "0100", 4);
                    // 업무구분
                    req = insertLeftJustify(req, "54", 2);
                }
                else if (radio_cashic_result.Checked == true)
                {
                    // 전문구분
                    req = insertLeftJustify(req, "0100", 4);
                    // 업무구분
                    req = insertLeftJustify(req, "55", 2);
                }

                req = insertLeftJustify(req, device_num.Text, 8);
                req = insertLeftJustify(req, receipt_num.Text, 4);
                req = insertLeftJustify(req, device_info.Text, 14);
                req = insertLeftJustify(req, price.Text, 12);  // 거래금액 
                req = insertLeftJustify(req, service_fee.Text, 12);
                req = insertLeftJustify(req, addon.Text, 12);
                req = insertLeftJustify(req, non_tax.Text, 12);
                req = insertLeftJustify(req, approval_date.Text, 8);
                req = insertLeftJustify(req, approval_num.Text, 12);
                req = insertLeftJustify(req, check.Text, 1);
                req = insertLeftJustify(req, reason.Text, 1);
                req = insertLeftJustify(req, Cash_IC_DISC.Text, 42);        // 가맹점데이타 (42)

                req = insertLeftJustify(req, textBox64.Text, 6);        // 컵보증금 (6)

                textBox4.Text = req.ToString();
                textBox4.Text = req.ToString();

                Writer.Write(req.ToString());
                Writer.Flush();
            }
        }

        private void button9_Click(object sender, EventArgs e)
        {
            if (isConnected == true)
            {
                StringBuilder req = new StringBuilder();
                req.Clear();
                req = insertLeftJustify(req, "0420", 4);
                req = insertLeftJustify(req, "40", 2);
                req = insertLeftJustify(req, textBox6.Text, 8);
                req = insertLeftJustify(req, "0000", 4);
                req = insertLeftJustify(req, "0", 14);
                req = insertLeftJustify(req, textBox7.Text, 2);
                req = insertLeftJustify(req, textBox8.Text, 12);
                req = insertLeftJustify(req, textBox9.Text, 12);
                req = insertLeftJustify(req, textBox10.Text, 12);
                req = insertLeftJustify(req, textBox11.Text, 12);
                req = insertLeftJustify(req, textBox12.Text, 8);
                req = insertLeftJustify(req, textBox13.Text, 12);
                req = insertLeftJustify(req, textBox14.Text, 1);
                req = insertLeftJustify(req, textBox15.Text, 1);
                req = insertLeftJustify(req, textBox16.Text, 30);       // 사용자정보 (30)
                req = insertLeftJustify(req, Recept_DISC.Text, 42);     // 가맹점데이타 (42)

                textBox4.Text = req.ToString();

                Writer.Write(req.ToString());
                Writer.Flush();
            }
        }

        private void card_KIOSK_Click(object sender, EventArgs e)
        {
            if (isConnected == true)
            {
                try
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();


                    req = insertLeftJustify(req, "K100", 4);        // 전문구분
                    req = insertLeftJustify(req, txt_2.Text, 8);    // 단말기 번호
                    req = insertLeftJustify(req, txt_4.Text, 12);   // 거래금액
                    req = insertLeftJustify(req, "1", 1);           // 입력요청구분

                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
                catch (Exception ex)
                {
                    textBox2.Text = "서버와 연결이 실패되었습니다.\n";
                }

            }
        }

        private void button5_Click_1(object sender, EventArgs e)
        {
            try
            {

                if (isConnected == true)
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();
                    req = insertLeftJustify(req, "K980", 4);
                    req = insertLeftJustify(req, "99999999", 8);
                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
            }
            catch (Exception ex)
            {
                textBox2.Text = "서버와 연결이 실패되었습니다.\n";
            }
        }

        private void button6_Click(object sender, EventArgs e)
        {
            if (isConnected == true)
            {
                StringBuilder req = new StringBuilder();
                req.Clear();
                req = insertLeftJustify(req, "C000", 4);        // 전문 구분 ( 상태 체크 )
                req = insertLeftJustify(req, "99999955", 8);    // 단말기 번호

                textBox4.Text = req.ToString();

                Writer.Write(req.ToString());
                Writer.Flush();
            }
        }

        private void button10_Click(object sender, EventArgs e)
        {
            if (isConnected == true)
            {
                try
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();

                    if (token_reg.Checked == true)
                    {
                        // 전문구분
                        req = insertLeftJustify(req, "0100", 4);
                        // 업무구분
                        req = insertLeftJustify(req, "1I", 2);
                    }
                    else if (token_unreg.Checked == true)
                    {
                        req = insertLeftJustify(req, "0420", 4);
                        // 업무구분
                        req = insertLeftJustify(req, "1I", 2);
                    }

                    string costomer_info =
                        textBox42.Text + "="
                        + textBox43.Text + "="
                        + textBox44.Text + "="
                        + textBox45.Text + "="
                        + textBox46.Text + "="
                        + textBox47.Text + "="
                        + textBox48.Text;

                    req = insertLeftJustify(req, textBox40.Text, 8);    // 단말기번호
                    req = insertLeftJustify(req, "0000", 4);        // 전표번호
                    req = insertLeftJustify(req, "0", 14);          // 단말기 정보
                    req = insertLeftJustify(req, textBox41.Text, 93);    // 가맹점 정보
                    req = insertLeftJustify(req, costomer_info, 88);    // 고객 정보
                    /////
                    //req = insertLeftJustify(req, textBox42.Text, 10);   // 카드 소유자 명
                    //req = insertLeftJustify(req, textBox43.Text, 8);   // 소유자생년원일
                    //req = insertLeftJustify(req, textBox44.Text, 1);   // 성별
                    //req = insertLeftJustify(req, textBox45.Text, 4);   // 휴대폰통신사
                    //req = insertLeftJustify(req, textBox46.Text, 11);    // 휴대폰번호
                    //req = insertLeftJustify(req, textBox47.Text, 20);   // 고객 ID
                    //req = insertLeftJustify(req, textBox48.Text, 2);  // 카드비밀번호
                    /////


                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
                catch (Exception ex)
                {
                    textBox2.Text = "서버와 연결이 실패되었습니다.\n";
                }

            }
        }

        private void button12_Click(object sender, EventArgs e)
        {
            if (isConnected == true)
            {
                try
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();

                    if (token_approval.Checked == true)
                    {
                        // 전문구분
                        req = insertLeftJustify(req, "0200", 4);
                        // 업무구분
                        req = insertLeftJustify(req, "1J", 2);
                    }
                    else if (token_cancel.Checked == true)
                    {
                        // 전문구분
                        req = insertLeftJustify(req, "0420", 4);
                        // 업무구분
                        req = insertLeftJustify(req, "1J", 2);
                    }

                    req = insertLeftJustify(req, textBox50.Text, 8);    // 단말기번호
                    req = insertLeftJustify(req, "0000", 4);            // 전표번호
                    req = insertLeftJustify(req, "0", 14);              // 단말기 정보
                    req = insertLeftJustify(req, textBox51.Text, 121);   // TOKEN 정보
                    req = insertLeftJustify(req, textBox52.Text, 2);    // 할부개월
                    req = insertLeftJustify(req, textBox53.Text, 12);   // 거래금액
                    req = insertLeftJustify(req, textBox54.Text, 12);   // 봉사료
                    req = insertLeftJustify(req, textBox55.Text, 12);   // 부가세
                    req = insertLeftJustify(req, textBox56.Text, 12);   // 비과세
                    req = insertLeftJustify(req, textBox57.Text, 8);    // 원승인일자 ( 취소 )
                    req = insertLeftJustify(req, textBox58.Text, 12);   // 원승인번호 ( 취소 )
                    req = insertLeftJustify(req, textBox59.Text, 93);   // 가맹점 정보


                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
                catch (Exception ex)
                {
                    textBox2.Text = "서버와 연결이 실패되었습니다.\n";
                }

            }
        }

        private string getWordByByte(string src, int startCount, int byteCount)
        {
            System.Text.Encoding myEncoding = System.Text.Encoding.GetEncoding("ks_c_5601-1987");

            byte[] buf = myEncoding.GetBytes(src);

            return myEncoding.GetString(buf, startCount, byteCount);
        }

        private void button6_Click_1(object sender, EventArgs e)
        {
            Connected = false;

            if (Reader != null)
            {
                Reader.Close();
            }

            if (Writer != null)
            {
                Writer.Close();
            }

            if (Client != null)
            {
                Client.Close();
            }

            if (ReceiveThread != null)
            {
                ReceiveThread.Abort();
            }

            textBox2.AppendText("서버 연결 해제 \r\n");
        }

        private void button11_Click(object sender, EventArgs e)
        {
            if (isConnected == true)
            {
                try
                {
                    int rc = -1;
                    StringBuilder req = new StringBuilder();
                    String rep = "";
                    byte[] req_array = new byte[3073];
                    byte[] rep_array = new byte[3073];

                    req.Clear();
                    Array.Clear(req_array, 0, req_array.Length);
                    Array.Clear(rep_array, 0, rep_array.Length);

                    // resultGridView.Rows.Clear();

                    //tbox_req.Text = "";
                    // tbox_rep.Text = "";

                    if (txt_2.Text.Length != 8)
                    {
                        MessageBox.Show("단말기 번호가 양식에 맞지 않습니다.");
                        return;
                    }

                    // 전문구분
                    req = insertLeftJustify(req, "0200", 4);
                    // 업무구분
                    req = insertLeftJustify(req, "15", 2);
                    // 단말기번호
                    req = insertLeftJustify(req, textBox17.Text, 8);
                    // 전표번호
                    req = insertLeftZero(req, "0000", 4);
                    // 단말기 정보
                    req = insertLeftJustify(req, "0", 14);
                    // 수표정보
                    req = insertLeftJustify(req, textBox18.Text, 15);
                    // 수표권종코드
                    req = insertLeftJustify(req, textBox19.Text, 2);
                    // 수표금액
                    req = insertLeftJustify(req, textBox20.Text, 12);
                    // 수표발행일자
                    req = insertLeftJustify(req, textBox21.Text, 8);
                    // 수표계좌일련번호
                    req = insertLeftJustify(req, textBox22.Text, 12);

                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
                catch (Exception ex)
                {
                    textBox2.Text = "서버와 연결이 실패되었습니다.\n";
                }

            }
        }

        private void Unique_Num_Cancel_Click(object sender, EventArgs e)
        {
            label63.Text = "거래고유번호(취소)";
        }

        private void Credit_Approve_Click(object sender, EventArgs e)
        {
            label63.Text = "서명패드 Key-In";
        }

        private void Credit_Cancel_Click(object sender, EventArgs e)
        {
            label63.Text = "서명패드 Key-In";
        }



        private void btn_wechat_Click(object sender, EventArgs e)
        {
            if (isConnected == true)
            {
                if (radio_approve_wechat.Checked == true)                               // 위쳇 승인 요청전문
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();
                    req = insertLeftJustify(req, "0200", 4);
                    req = insertLeftJustify(req, "1G", 2);

                    req = insertLeftJustify(req, txt_wechat_device.Text, 8);            // 단말기번호
                    req = insertLeftJustify(req, "0000", 4);
                    req = insertLeftJustify(req, "0", 14);
                    req = insertLeftJustify(req, txt_wechat_money.Text, 12);            // 금액
                    //   req = insertLeftJustify(req, txt_wechat_install.Text, 12);        // 할부
                    req = insertLeftJustify(req, txt_wechat_servfee.Text, 12);          // 봉사료 
                    req = insertLeftJustify(req, txt_wechat_tax.Text, 12);              // 세금
                    req = insertLeftJustify(req, "B" + txt_wechat_barcode.Text, 19);      // 바코드

                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
                else if (radio_cancel_wechat.Checked == true)                       // 위쳇 취소 요청전문
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();
                    req = insertLeftJustify(req, "0420", 4);
                    req = insertLeftJustify(req, "1G", 2);

                    req = insertLeftJustify(req, txt_wechat_device.Text, 8);             // 단말기번호
                    req = insertLeftJustify(req, "0000", 4);
                    req = insertLeftJustify(req, "0", 14);
                    req = insertLeftJustify(req, txt_wechat_money.Text, 12);             // 금액
                    req = insertLeftJustify(req, txt_wechat_servfee.Text, 12);           // 봉사료 
                    req = insertLeftJustify(req, txt_wechat_tax.Text, 12);               // 부가세 
                    req = insertLeftJustify(req, txt_wechat_ApprovNum.Text, 12);         // 원승인번호 
                                                                                         //    req = insertLeftJustify(req, txt_wechat_barcode.Text, 18);           // 바코드

                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();

                }
                else if (radio_approve_ali.Checked == true)                             // 알리페이 승인 요청전문
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();
                    req = insertLeftJustify(req, "0200", 4);
                    req = insertLeftJustify(req, "1N", 2);

                    req = insertLeftJustify(req, txt_wechat_device.Text, 8);             // 단말기번호
                    req = insertLeftJustify(req, "0000", 4);
                    req = insertLeftJustify(req, "0", 14);
                    req = insertLeftJustify(req, txt_wechat_money.Text, 12);             // 금액
                    req = insertLeftJustify(req, txt_wechat_servfee.Text, 12);           // 봉사료  
                    req = insertLeftJustify(req, txt_wechat_tax.Text, 12);               // 세금
                    req = insertLeftJustify(req, "B" + txt_wechat_barcode.Text, 19);     // 바코드

                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
                else if (radio_cancel_ali.Checked == true)                            // 알리페이 취소 요청전문
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();
                    req = insertLeftJustify(req, "0420", 4);
                    req = insertLeftJustify(req, "1N", 2);

                    req = insertLeftJustify(req, txt_wechat_device.Text, 8);        // 단말기번호
                    req = insertLeftJustify(req, "0000", 4);
                    req = insertLeftJustify(req, "0", 14);
                    req = insertLeftJustify(req, txt_wechat_money.Text, 12);        // 금액
                    req = insertLeftJustify(req, txt_wechat_servfee.Text, 12);      // 봉사료 
                    req = insertLeftJustify(req, txt_wechat_tax.Text, 12);          // 세금 
                    req = insertLeftJustify(req, txt_wechat_ApprovDate.Text, 8);    // 원승인일자 
                    req = insertLeftJustify(req, txt_wechat_ApprovNum.Text, 18);    // 원승인번호 
                    req = insertLeftJustify(req, txt_wechat_barcode.Text, 18);      // 바코드

                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
                else if (radio_approve_wechat_pg.Checked == true)                         // 위쳇PG 승인 요청전문
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();
                    req = insertLeftJustify(req, "0200", 4);
                    req = insertLeftJustify(req, "1P", 2);

                    req = insertLeftJustify(req, txt_wechat_device.Text, 8);            // 단말기번호
                    req = insertLeftJustify(req, "0000", 4);
                    req = insertLeftJustify(req, "0", 14);
                    req = insertLeftJustify(req, txt_wechat_money.Text, 12);            // 금액 
                    req = insertLeftJustify(req, txt_wechat_servfee.Text, 12);          // 봉사료 
                    req = insertLeftJustify(req, txt_wechat_tax.Text, 12);              // 세금
                    req = insertLeftJustify(req, "B" + txt_wechat_barcode.Text, 19);    // 바코드

                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
                else if (radio_cancel_wechat_pg.Checked == true)                         // 위쳇PG 취소 요청전문
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();
                    req = insertLeftJustify(req, "0420", 4);
                    req = insertLeftJustify(req, "1P", 2);

                    req = insertLeftJustify(req, txt_wechat_device.Text, 8);            // 단말기번호
                    req = insertLeftJustify(req, "0000", 4);
                    req = insertLeftJustify(req, "0", 14);
                    req = insertLeftJustify(req, txt_wechat_money.Text, 12);            // 금액
                    req = insertLeftJustify(req, txt_wechat_servfee.Text, 12);          // 봉사료 
                    req = insertLeftJustify(req, txt_wechat_tax.Text, 12);              // 세금
                    req = insertLeftJustify(req, txt_wechat_ApprovNum.Text, 18);      // 원승인번호
                    //  req = insertLeftJustify(req, "B" + txt_wechat_barcode.Text, 19);    // 바코드

                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
                else if (radio_approve_ali_pg.Checked == true)                         // 알리페이PG 승인 요청전문
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();
                    req = insertLeftJustify(req, "0200", 4);
                    req = insertLeftJustify(req, "1O", 2);
                    req = insertLeftJustify(req, txt_wechat_device.Text, 8);            // 단말기번호
                    req = insertLeftJustify(req, "0000", 4);
                    req = insertLeftJustify(req, "0", 14);
                    req = insertLeftJustify(req, txt_wechat_money.Text, 12);            // 금액 
                    req = insertLeftJustify(req, txt_wechat_servfee.Text, 12);          // 봉사료 
                    req = insertLeftJustify(req, txt_wechat_tax.Text, 12);              // 세금
                    req = insertLeftJustify(req, "B" + txt_wechat_barcode.Text, 19);    // 바코드

                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
                else if (radio_cancel_ali_pg.Checked == true)                            // 알리페이PG 취소 요청전문
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();
                    req = insertLeftJustify(req, "0420", 4);
                    req = insertLeftJustify(req, "1O", 2);

                    req = insertLeftJustify(req, txt_wechat_device.Text, 8);            // 단말기번호
                    req = insertLeftJustify(req, "0000", 4);
                    req = insertLeftJustify(req, "0", 14);
                    req = insertLeftJustify(req, txt_wechat_money.Text, 12);            // 금액
                    req = insertLeftJustify(req, txt_wechat_servfee.Text, 12);          // 봉사료 
                    req = insertLeftJustify(req, txt_wechat_tax.Text, 12);              // 세금
                    req = insertLeftJustify(req, txt_wechat_ApprovDate.Text, 8);    // 원승인일자 
                    req = insertLeftJustify(req, txt_wechat_ApprovNum.Text, 20);        // 원승인번호
                    //req = insertLeftJustify(req, "B" + txt_wechat_barcode.Text, 19);    // 바코드

                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
                else if (radio_approve_ali_gom.Checked == true)                         // 알리페이GOM 승인 요청전문
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();
                    req = insertLeftJustify(req, "0200", 4);
                    req = insertLeftJustify(req, "1V", 2);

                    req = insertLeftJustify(req, txt_wechat_device.Text, 8);            // 단말기번호
                    req = insertLeftJustify(req, "0000", 4);
                    req = insertLeftJustify(req, "0", 14);
                    req = insertLeftJustify(req, txt_wechat_money.Text, 12);            // 금액 
                    req = insertLeftJustify(req, txt_wechat_servfee.Text, 12);          // 봉사료 
                    req = insertLeftJustify(req, txt_wechat_tax.Text, 12);              // 세금
                    req = insertLeftJustify(req, "B" + txt_wechat_barcode.Text, 61);    // 바코드

                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
                else if (radio_cancel_ali_gom.Checked == true)                         // 알리페이GOM 취소 요청전문
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();
                    req = insertLeftJustify(req, "0420", 4);
                    req = insertLeftJustify(req, "1V", 2);

                    req = insertLeftJustify(req, txt_wechat_device.Text, 8);            // 단말기번호
                    req = insertLeftJustify(req, "0000", 4);
                    req = insertLeftJustify(req, "0", 14);
                    req = insertLeftJustify(req, txt_wechat_money.Text, 12);            // 금액
                    req = insertLeftJustify(req, txt_wechat_servfee.Text, 12);          // 봉사료 
                    req = insertLeftJustify(req, txt_wechat_tax.Text, 12);              // 세금
                    req = insertLeftJustify(req, txt_wechat_ApprovNum.Text, 32);      // 원승인번호
                    //  req = insertLeftJustify(req, "B" + txt_wechat_barcode.Text, 19);    // 바코드

                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }

            }
        }



        private void radio_approve_ali_pg_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void radio_cancel_wechat_CheckedChanged(object sender, EventArgs e)
        {
            txt_wechat_barcode.Text = "";
            txt_wechat_ApprovDate.Text = "";
            txt_wechat_ApprovNum.Text = "";

            if (radio_cancel_wechat.Checked == true)
            {
                txt_wechat_barcode.Enabled = false;
                txt_wechat_ApprovDate.Enabled = false;
                txt_wechat_ApprovNum.Enabled = true;
            }
            else
            {
                txt_wechat_barcode.Enabled = true;
                txt_wechat_ApprovDate.Enabled = false;
                txt_wechat_ApprovNum.Enabled = false;
            }
        }

        private void radio_approve_ali_CheckedChanged(object sender, EventArgs e)
        {
            txt_wechat_barcode.Text = "";
            txt_wechat_ApprovDate.Text = "";
            txt_wechat_ApprovNum.Text = "";

        }

        private void radio_cancel_wechat_pg_CheckedChanged(object sender, EventArgs e)
        {
            txt_wechat_barcode.Text = "";
            txt_wechat_ApprovDate.Text = "";
            txt_wechat_ApprovNum.Text = "";

            if (radio_cancel_wechat_pg.Checked == true)
            {
                txt_wechat_barcode.Enabled = false;
                txt_wechat_ApprovDate.Enabled = false;
                txt_wechat_ApprovNum.Enabled = true;
            }
            else
            {
                txt_wechat_barcode.Enabled = true;
                txt_wechat_ApprovDate.Enabled = false;
                txt_wechat_ApprovNum.Enabled = false;
            }
        }

        private void radio_cancel_ali_pg_CheckedChanged(object sender, EventArgs e)
        {
            txt_wechat_barcode.Text = "";
            txt_wechat_ApprovDate.Text = "";
            txt_wechat_ApprovNum.Text = "";

            if (radio_cancel_ali_pg.Checked == true)
            {
                txt_wechat_barcode.Enabled = false;
                txt_wechat_ApprovDate.Enabled = true;
                txt_wechat_ApprovNum.Enabled = true;
            }
            else
            {
                txt_wechat_barcode.Enabled = true;
                txt_wechat_ApprovDate.Enabled = false;
                txt_wechat_ApprovNum.Enabled = false;
            }
        }

        private void radio_approve_ali_pg_CheckedChanged_1(object sender, EventArgs e)
        {
            txt_wechat_barcode.Text = "";
            txt_wechat_ApprovDate.Text = "";
            txt_wechat_ApprovNum.Text = "";

        }

        private void radio_approve_wechat_pg_CheckedChanged(object sender, EventArgs e)
        {
            txt_wechat_barcode.Text = "";
            txt_wechat_ApprovDate.Text = "";
            txt_wechat_ApprovNum.Text = "";

            if (radio_cancel_wechat_pg.Checked == true)
            {
                txt_wechat_barcode.Enabled = true;
                txt_wechat_ApprovDate.Enabled = false;
                txt_wechat_ApprovNum.Enabled = true;
            }
            else
            {
                txt_wechat_barcode.Enabled = true;
                txt_wechat_ApprovDate.Enabled = false;
                txt_wechat_ApprovNum.Enabled = false;
            }
        }

        private void radio_approve_wechat_CheckedChanged(object sender, EventArgs e)
        {
            txt_wechat_barcode.Text = "";
            txt_wechat_ApprovDate.Text = "";
            txt_wechat_ApprovNum.Text = "";

        }

        private void radio_cancel_ali_CheckedChanged(object sender, EventArgs e)
        {
            txt_wechat_barcode.Text = "";
            txt_wechat_ApprovDate.Text = "";
            txt_wechat_ApprovNum.Text = "";

            if (radio_cancel_ali.Checked == true)
            {
                txt_wechat_barcode.Enabled = false;
                txt_wechat_ApprovDate.Enabled = true;
                txt_wechat_ApprovNum.Enabled = true;
            }
            else
            {
                txt_wechat_barcode.Enabled = true;
                txt_wechat_ApprovDate.Enabled = false;
                txt_wechat_ApprovNum.Enabled = false;
            }
        }

        private void radio_approve_ali_gom_CheckedChanged(object sender, EventArgs e)
        {
            txt_wechat_barcode.Text = "";
            txt_wechat_ApprovDate.Text = "";
            txt_wechat_ApprovNum.Text = "";

            if (radio_approve_ali_gom.Checked == true)
            {
                txt_wechat_barcode.Enabled = true;
                txt_wechat_ApprovDate.Enabled = false;
                txt_wechat_ApprovNum.Enabled = false;
            }
            else
            {
                txt_wechat_barcode.Enabled = true;
                txt_wechat_ApprovDate.Enabled = false;
                txt_wechat_ApprovNum.Enabled = false;
            }
        }

        private void radio_cancel_ali_gom_CheckedChanged(object sender, EventArgs e)
        {
            txt_wechat_barcode.Text = "";
            txt_wechat_ApprovDate.Text = "";
            txt_wechat_ApprovNum.Text = "";

            if (radio_cancel_ali_gom.Checked == true)
            {
                txt_wechat_barcode.Enabled = false;
                txt_wechat_ApprovDate.Enabled = false;
                txt_wechat_ApprovNum.Enabled = true;
            }
            else
            {
                txt_wechat_barcode.Enabled = true;
                txt_wechat_ApprovDate.Enabled = false;
                txt_wechat_ApprovNum.Enabled = false;
            }
        }

        private void button_point_send_Click(object sender, EventArgs e)
        {


            if (isConnected == true)
            {
                StringBuilder req = new StringBuilder();
                req.Clear();

                if (radioButton2.Checked == true)
                {
                    // 전문구분
                    req = insertLeftJustify(req, "0200", 4);
                    // 업무구분
                    req = insertLeftJustify(req, "31", 2);
                }
                else if (radioButton3.Checked == true)
                {
                    req = insertLeftJustify(req, "0420", 4);
                    // 업무구분
                    req = insertLeftJustify(req, "31", 2);
                }
                else if (radioButton4.Checked == true)
                {
                    // 전문구분
                    req = insertLeftJustify(req, "0200", 4);
                    // 업무구분
                    req = insertLeftJustify(req, "32", 2);
                }
                else if (radioButton5.Checked == true)
                {
                    // 전문구분
                    req = insertLeftJustify(req, "0420", 4);
                    // 업무구분
                    req = insertLeftJustify(req, "32", 2);
                }
                else if (radioButton6.Checked == true)
                {
                    // 전문구분
                    req = insertLeftJustify(req, "0200", 4);
                    // 업무구분
                    req = insertLeftJustify(req, "35", 2);
                }

                else if (radioButton7.Checked == true)
                {
                    // 전문구분
                    req = insertLeftJustify(req, "0420", 4);
                    // 업무구분
                    req = insertLeftJustify(req, "35", 2);
                }
                else if (radioButton8.Checked == true)
                {
                    // 전문구분
                    req = insertLeftJustify(req, "0200", 4);
                    // 업무구분
                    req = insertLeftJustify(req, "30", 2);
                }
                else if (radioButton1.Checked == true)
                {
                    // 전문구분
                    req = insertLeftJustify(req, "0200", 4);
                    // 업무구분
                    req = insertLeftJustify(req, "33", 2);
                }
                else if (radioButton9.Checked == true)
                {
                    // 전문구분
                    req = insertLeftJustify(req, "0200", 4);
                    // 업무구분
                    req = insertLeftJustify(req, "34", 2);
                }
                else if (radioButton10.Checked == true)
                {
                    // 전문구분
                    req = insertLeftJustify(req, "0420", 4);
                    // 업무구분
                    req = insertLeftJustify(req, "34", 2);
                }

                req = insertLeftJustify(req, textBox23.Text, 8);
                req = insertLeftJustify(req, receipt_num.Text, 4);
                req = insertLeftJustify(req, textBox31.Text, 14);
                req = insertLeftJustify(req, textBox24.Text, 12);  // 거래금액 
                req = insertLeftJustify(req, textBox25.Text, 12);//기타금액
                req = insertLeftJustify(req, textBox26.Text, 1); //키인구분
                req = insertLeftJustify(req, textBox27.Text, 30); //사용자정보
                req = insertLeftJustify(req, textBox28.Text, 5); //포인트구분
                req = insertLeftJustify(req, textBox29.Text, 8); //포인트원승인일자
                req = insertLeftJustify(req, textBox30.Text, 12); //원승인번호

                if (textBox31.Text[0] == 'M')
                {
                    req = insertLeftJustify(req, textBox32.Text, 8); //부단말기번호
                }

                req = insertLeftJustify(req, textBox62.Text, 6); //컵 보증금

                //유종 정보
                req = insertLeftJustify(req, "\x1c", 1);

                if(textBox31.Text[0] == '1' || textBox31.Text[0] == '2' || textBox31.Text[0] == '3' )
                {
                    req = insertLeftJustify(req, textBox66.Text, 88);
                }
                else
                {
                    //req = insertLeftJustify(req, "", 88);
                }

                req = insertLeftJustify(req, "\x03", 1);

                textBox4.Text = req.ToString();

                Writer.Write(req.ToString());
                Writer.Flush();
            }
        }

        private void button_barcode_send_Click(object sender, EventArgs e)
        {
            if (isConnected == true)
            {
                try
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();

                    if (radioButton_Barcode_app.Checked == true)
                    {
                        // 전문구분
                        req = insertLeftJustify(req, "Z100", 4);
                        // 업무구분
                        req = insertLeftJustify(req, "99", 2);
                    }
                    else if (radioButton_Barcode_can.Checked == true)
                    {
                        req = insertLeftJustify(req, "Z400", 4);
                        // 업무구분
                        req = insertLeftJustify(req, "99", 2);
                    }
                    else if (radioButton14.Checked == true)
                    {
                        req = insertLeftJustify(req, "0200", 4);
                        // 업무구분
                        req = insertLeftJustify(req, "38", 2);
                    }
                    else if (radioButton15.Checked == true)
                    {
                        req = insertLeftJustify(req, "0420", 4);
                        // 업무구분
                        req = insertLeftJustify(req, "38", 2);
                    }

                    req = insertLeftJustify(req, textBox_barcode_tid.Text, 8);
                    req = insertLeftJustify(req, "0000", 4);
                    req = insertLeftJustify(req, textBox69.Text, 14);
                    req = insertLeftJustify(req, textBox_barcode_install.Text, 2);
                    req = insertLeftJustify(req, textBox_barcode_amount.Text, 12);
                    req = insertLeftJustify(req, textBox_barcode_tip.Text, 12);
                    req = insertLeftJustify(req, textBox_barcode_tax.Text, 12);
                    req = insertLeftJustify(req, textBox_barcode_nontax.Text, 12);
                    req = insertLeftJustify(req, textBox_barcode_date.Text, 8);

                    if ( (radioButton14.Checked != true) && (radioButton15.Checked != true))
                    {
                        req = insertLeftJustify(req, textBox_barcode_authnum.Text, 12);

                    }

                    req = insertLeftJustify(req, textBox_barcode_merchdata.Text, 42);

                    if(checkBox2.Checked == true)
                    {
                        req = insertLeftJustify(req, textBox73.Text, 8);
                        req = insertLeftJustify(req, textBox72.Text, 1);
                    }


                    req = insertLeftJustify(req, textBox_barcode_data.Text, 512);
                    req = insertLeftJustify(req, textBox65.Text, 6);

                    if ((radioButton14.Checked != true) && (radioButton15.Checked != true))
                    {
                        req = insertLeftJustify(req, "\x1c", 1);

                        //유종 정보
                        if (textBox69.Text[0] == '1' || textBox69.Text[0] == '2' || textBox69.Text[0] == '3')
                        {
                            req = insertLeftJustify(req, textBox68.Text, 88);
                        }
                        req = insertLeftJustify(req, "\x03", 1);
                    }


                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
                catch (Exception ex)
                {
                    textBox2.Text = "서버와 연결이 실패되었습니다.\n";
                }

            }
        }

        private void button13_Click(object sender, EventArgs e)
        {
            if (isConnected == true)
            {
                try
                {
                    StringBuilder req = new StringBuilder();
                    req.Clear();

                    if (radioButton11.Checked == true)
                    {
                        // 전문구분
                        req = insertLeftJustify(req, "0100", 4);
                        // 업무구분
                        req = insertLeftJustify(req, "0A", 2);
                    }
                    else
                    {
                        return;
                    }

                    req = insertLeftJustify(req, textBox36.Text, 8);
                    req = insertLeftJustify(req, "0000", 4);
                    req = insertLeftJustify(req, "0", 14);

                    req = insertLeftJustify(req, textBox37.Text, 8);
                    req = insertLeftJustify(req, textBox33.Text, 1);
                    req = insertLeftJustify(req, textBox35.Text, 4);

                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
                catch (Exception ex)
                {
                    textBox2.Text = "서버와 연결이 실패되었습니다.\n";
                }

            }
        }

        private void button14_Click(object sender, EventArgs e)
        {
            if (isConnected == true)
            {
                try
                {
                    int rc = -1;
                    StringBuilder req = new StringBuilder();
                    String rep = "";
                    byte[] req_array = new byte[3073];
                    byte[] rep_array = new byte[3073];

                    req.Clear();
                    Array.Clear(req_array, 0, req_array.Length);
                    Array.Clear(rep_array, 0, rep_array.Length);

                    if (txt_2.Text.Length != 8)
                    {
                        MessageBox.Show("단말기 번호가 양식에 맞지 않습니다.");
                        return;
                    }

                    // 전문구분
                    req = insertLeftJustify(req, "0200", 4);
                    // 업무구분
                    req = insertLeftJustify(req, "9B", 2);
                    // 단말기번호
                    req = insertLeftJustify(req, textBox39.Text, 8);
                    // 전표번호
                    req = insertLeftZero(req, textBox38.Text, 4);
                    // 단말기 정보
                    req = insertLeftJustify(req, textBox34.Text, 14);
                    //유종 정보
                    req = insertLeftJustify(req, "\x1c", 1);
                    req = insertLeftJustify(req, textBox49.Text, 66);
                    req = insertLeftJustify(req, "\x03", 1);

                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
                catch (Exception ex)
                {
                    textBox2.Text = "서버와 연결이 실패되었습니다.\n";
                }

            }
        }

        private void button15_Click(object sender, EventArgs e)
        {
            if (isConnected == true)
            {
                try
                {
                    StringBuilder req = new StringBuilder();

                    req.Clear();

                    req = insertLeftJustify(req, "K900", 4);        // 전문구분
                    req = insertLeftJustify(req, txt_2.Text, 8);    // 단말기 번호
                    textBox4.Text = req.ToString();

                    Writer.Write(req.ToString());
                    Writer.Flush();
                }
                catch (Exception ex)
                {
                    textBox2.Text = "서버와 연결이 실패되었습니다.\n";
                }

            }
        }

    }
}
